import tkinter as tk
import math
import sys
import time

# 屏幕配置（自动适配）
def get_screen_size():
    root = tk.Tk()
    root.withdraw()
    return root.winfo_screenwidth(), root.winfo_screenheight()
SCREEN_WIDTH, SCREEN_HEIGHT = get_screen_size()
HEART_CENTER_X = SCREEN_WIDTH // 2
HEART_CENTER_Y = SCREEN_HEIGHT // 2

# 文字列表（简洁表白文字）
LOVE_WORDS = [
    "每次想你星星都亮了",
    "想在春风里遇见你",
    "心软是因为你",
    "梦里有你真好",
    "此刻的欢喜",
    "思念在风里摇",
    "你选我我超开心",
    "遇见你的心动",
    "想陪你虚度时光",
    "你的名字很好听",
    "喜欢你这件事",
    "一眼就心动了",
    "也遇见了",
    "想和你关系越长越好啦",
    "梦里有你真好",
    "超想和你贴贴",
    "心软是因为你",
    "想和你牵手",
    "想你啦快来见我",
    "我好喜欢你",
    "月亮不睡你不睡",
    "陪你度余生",
    "与你有关",
    "想在夏日遇见你",
    "想和你看星星",
    "偷偷藏不住喜欢",
    "世界因你而美好",
    "余生请多指教",
    "遇见你真好",
    "爱你",
    "Love",
    "❤️",
    "I ❤️ U",
    "喜欢你"
]

# 马卡龙便签色（浅色系，贴合图二风格）
COLORS = [
    '#FFD1DC', '#FFB6C1', '#FFE4B5',  # 浅粉、浅橙、浅黄
    '#E0FFFF', '#B0E0E6', '#87CEEB',  # 浅蓝、浅蓝灰、浅蓝
    '#D3E8D3', '#C1E1C1', '#90EE90',  # 浅绿、浅薄荷、浅绿
]

def generate_heart_positions(num_points, center_x, center_y, scale=20):
    """生成**规整爱心轮廓**的坐标，减少随机偏移"""
    positions = []
    for i in range(num_points):
        t = (i / num_points) * 2 * math.pi
        # 爱心参数方程（精准计算坐标）
        x = 16 * math.sin(t) ** 3
        y = 13 * math.cos(t) - 5 * math.cos(2 * t) - 2 * math.cos(3 * t) - math.cos(4 * t)
        x = x * scale + center_x
        y = -y * scale + center_y  # 翻转y轴使爱心正向
        positions.append((int(x), int(y)))
    return positions

def create_sticky_note(text, x, y, color, window_list, index):
    """创建**统一便签样式**的窗口（添加index参数传递循环索引）"""
    window = tk.Tk()
    # 保留标题栏和按钮（不使用overrideredirect）
    window.title("💖 爱心便签")  # 设置窗口标题
    window.attributes('-topmost', True)  # 窗口置顶

    # 统一字体和大小（增大字体）
    font = ('Microsoft YaHei', 14, 'bold')  # 从12增大到14

    # 便签样式：浅背景、黑字、简洁边框
    label = tk.Label(
        window,
        text=text,
        font=font,
        fg='black',
        bg=color,
        padx=12,  # 从8增大到12
        pady=8,   # 从6增大到8
        relief='solid',
        borderwidth=1
    )
    label.pack(fill='both', expand=True)

    # 设置窗口背景色与标签一致
    window.configure(bg=color)

    # 统一窗口大小（让便签外观一致）
    window.update_idletasks()
    width = label.winfo_reqwidth() + 10
    height = label.winfo_reqheight() + 10
    # 轻微偏移模拟3D堆叠（极小幅偏移，避免杂乱）
    pos_x = x - width // 2 + (index % 3 - 1)  # 使用传递的index参数
    pos_y = y - height // 2 + (index % 3 - 1)
    window.geometry(f"{width}x{height}+{pos_x}+{pos_y}")

    # 立即显示窗口，不等待其他窗口
    window.deiconify()
    window.update()

    # 绑定ESC键关闭所有窗口
    def close_all(event=None):
        for win in window_list:
            try:
                win.destroy()
            except:
                pass
        sys.exit(0)
    window.bind('<Escape>', close_all)
    
    # 点击关闭按钮时关闭所有窗口
    window.protocol("WM_DELETE_WINDOW", close_all)

    return window

def create_heart_stickies(positions, words, colors, delay=0.08):
    """创建**规整堆叠**的爱心便签，带延迟效果
    
    Args:
        positions: 窗口位置列表
        words: 文字列表
        colors: 颜色列表
        delay: 每个窗口之间的延迟时间（秒），默认0.08秒
    """
    windows = []
    for i, pos in enumerate(positions):
        text = words[i % len(words)]
        color = colors[i % len(colors)]
        # 传递循环索引i到create_sticky_note函数
        win = create_sticky_note(text, pos[0], pos[1], color, windows, i)
        windows.append(win)
        
        # 添加延迟，让窗口逐个弹出
        time.sleep(delay)
        
        # 打印创建进度
        if (i + 1) % 10 == 0:
            print(f"已创建 {i+1}/{len(positions)} 个便签")
    print(f"✨ 全部 {len(windows)} 个便签创建完成！")
    return windows

def main():
    print("=" * 60)
    print("💖 便签爱心生成工具 - 图二风格版 💖")
    print("=" * 60)
    print(f"  - 文字库: {len(LOVE_WORDS)} 条（中日混合）")
    print(f"  - 颜色数量: {len(COLORS)} 种马卡龙便签色")
    print("\n使用说明：")
    print("  - 按ESC键退出程序")
    print("=" * 60)

    # 生成爱心坐标（增加点数，让便签更密集）
    num_stickies = 80  # 便签数量，越多越密集
    positions = generate_heart_positions(num_stickies, HEART_CENTER_X, HEART_CENTER_Y, scale=20)

    # 创建便签窗口（delay可调整：0.05=快，0.08=中等，0.1=慢，0.15=很慢）
    windows = create_heart_stickies(positions, LOVE_WORDS, COLORS, delay=0.08)

    # 保持主循环（监听ESC键）
    root = tk.Tk()
    root.withdraw()
    root.bind('<Escape>', lambda e: sys.exit(0))
    root.mainloop()

if __name__ == '__main__':
    main()